package com.x.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.UUID;

/**
 * the class of advance
 *
 * 提供文件下载接口
 * <p>
 * .
 *
 * @author little_lunatic
 * @date 2024-06-04
 */
@Slf4j
@Controller
public class UploadController {

    // 定义文件上传后保存的目录，这里假设保存到项目根目录下的uploads文件夹，可根据实际需求调整
    private static final String UPLOAD_FOLDER = "xxx-users-uploads";

    @GetMapping("/")
    public Object index() {
        return "static/upload.html";
    }

    @PostMapping("upload")
    @ResponseBody
    public String uploadFile(@RequestParam("file") MultipartFile file) {
        if (!file.isEmpty()) {
            try {
                // 获取原始文件名
                String originalFileName = file.getOriginalFilename();
                // 为了避免文件名重复以及处理可能存在的特殊字符等问题，使用UUID生成唯一文件名
                String uniqueFileName = UUID.randomUUID() + "_" + originalFileName;
                // 构建保存文件的目标路径
                Path uploadPath = Paths.get(UPLOAD_FOLDER, uniqueFileName);
                // 创建目标文件所在目录（如果不存在）
                Files.createDirectories(uploadPath.getParent());
                // 将文件内容复制到目标路径
                Files.copy(file.getInputStream(), uploadPath);
                return "success"; // 上传成功后重定向到成功页面，可根据实际情况调整
            } catch (IOException e) {
                e.printStackTrace();
                return "error"; // 上传失败重定向到错误页面，可根据实际情况调整
            }
        }
        return "error";
    }
}
